package com.loong.android.http;

import com.lzy.okgo.OkGo;
import com.lzy.okgo.cookie.CookieJarImpl;
import com.lzy.okgo.cookie.store.CookieStore;

import java.util.List;
import okhttp3.Cookie;
import okhttp3.HttpUrl;

public class CookieUtils {
    /**
     * 获取所有的Cookie
     */
    public List<Cookie> getAllCookie() {
        CookieStore cookieStore = OkGo.getInstance().getCookieJar().getCookieStore();
        return cookieStore.getAllCookie();
    }

    /**
     * 获取指定网络地址的所有Cookie
     */
    public List<Cookie> getAllCookie(String url) {
        CookieStore cookieStore = OkGo.getInstance().getCookieJar().getCookieStore();
        return cookieStore.getCookie(HttpUrl.parse(url));
    }

    /**
     * 清空某个网络地址下的所有cookie。
     *
     * @param url 待清空cookie的网络地址
     */
    public static boolean clearCookie(String url) {
        CookieJarImpl cookieJar = OkGo.getInstance().getCookieJar();
        if(cookieJar == null) return true;
        CookieStore cookieStore = cookieJar.getCookieStore();
        if(cookieStore == null) return true;
        return cookieStore.removeCookie(HttpUrl.parse(url));
    }

    /**
     * 清空当前所有的cookie
     */
    public static boolean clearAllCookie() {
        CookieJarImpl cookieJar = OkGo.getInstance().getCookieJar();
        if(cookieJar == null) return true;
        CookieStore cookieStore = cookieJar.getCookieStore();
        if(cookieStore == null) return true;
        return cookieStore.removeAllCookie();
    }

    /**
     * 清除某个网络地址下的某个cookie，返回真表示清除成功，返回假表示清除失败。
     * @param url 待清除cookie的网络地址
     * @param cookie 待清除的cookie对象
     */
    public boolean removeCookie(String url, Cookie cookie) {
        CookieJarImpl cookieJar = OkGo.getInstance().getCookieJar();
        if(cookieJar == null) return false;
        CookieStore cookieStore = cookieJar.getCookieStore();
        if(cookieStore == null) return false;
        return cookieStore.removeCookie(HttpUrl.parse(url), cookie);
    }

    /**
     * 向某个网络地址写入一个cookie数据
     *
     * @param url 待写入cookie的网络地址
     * @param cookie 待写入的cookie
     */
    public void saveCookie(String url, Cookie cookie) {
        CookieJarImpl cookieJar = OkGo.getInstance().getCookieJar();
        if(cookieJar == null) return;
        CookieStore cookieStore = cookieJar.getCookieStore();
        if(cookieStore == null) return;
        cookieStore.saveCookie(HttpUrl.parse(url), cookie);
    }

    /**
     * 写入指定网络地址的多个cookie
     *
     * @param url 网络地址
     * @param cookies 待写入的cookie
     */
    public void saveCookie(String url, List<Cookie> cookies) {
        CookieJarImpl cookieJar = OkGo.getInstance().getCookieJar();
        if(cookieJar == null) return;
        CookieStore cookieStore = cookieJar.getCookieStore();
        if(cookieStore == null) return;
        cookieStore.saveCookie(HttpUrl.parse(url), cookies);
    }
}
